REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল, যা ওয়েব সার্ভিস তৈরি করতে ব্যবহৃত হয়। RESTful API বা REST API ওয়েব অ্যাপ্লিকেশন এবং ক্লায়েন্টের মধ্যে যোগাযোগের জন্য HTTP প্রটোকল ব্যবহার করে। REST API তৈরি করতে Python এ সাধারণত Flask বা Django ফ্রেমওয়ার্ক ব্যবহার করা হয়। এখানে আমরা Flask ব্যবহার করে REST API তৈরি এবং তা ব্যবহারের প্রক্রিয়া বিস্তারিতভাবে আলোচনা করব।
REST API এর মূল বৈশিষ্ট্য
- Stateless: REST API-তে সার্ভার কোন ক্লায়েন্টের স্টেট বা অবস্থান সংরক্ষণ করে না। প্রতিটি অনুরোধ (request) সম্পূর্ণ স্বাধীন এবং পূর্ববর্তী অনুরোধের সাথে কোনো সম্পর্ক রাখে না।
- Client-Server Architecture: ক্লায়েন্ট এবং সার্ভার আলাদা থাকে এবং তাদের মধ্যে HTTP প্রটোকল দ্বারা যোগাযোগ হয়।
- Cacheable: প্রতিটি প্রতিক্রিয়া (response) cacheable হতে পারে যাতে এটি পরবর্তী সময়ের জন্য ব্যবহার করা যায়।
- Uniform Interface: RESTful API একটি ইউনিফর্ম ইন্টারফেস ব্যবহার করে, যাতে একটি নির্দিষ্ট পদ্ধতিতে অনুরোধ পাঠানো এবং প্রতিক্রিয়া পাওয়া যায়।
- Layered System: REST API সার্ভার এবং ক্লায়েন্টের মধ্যে অন্যান্য মধ্যবর্তী সার্ভার (যেমন: প্রোক্সি, গেটওয়ে) থাকতে পারে।
Flask দিয়ে REST API তৈরি
Flask হলো একটি মাইক্রো ওয়েব ফ্রেমওয়ার্ক যা Python দিয়ে ওয়েব অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। Flask সহজেই RESTful API তৈরি করতে সাহায্য করে।
ধাপ ১: Flask ইনস্টল করা
প্রথমে, Flask ইনস্টল করতে হবে:
pip install Flask
ধাপ ২: Flask অ্যাপ্লিকেশন তৈরি করা
এখানে একটি সিম্পল REST API তৈরি করা হয়েছে যা GET, POST, PUT, এবং DELETE HTTP মেথড সমর্থন করে:
from flask import Flask, jsonify, request
app = Flask(__name__)
# কিছু ডামি ডেটা
todos = [
{'id': 1, 'task': 'Learn Python'},
{'id': 2, 'task': 'Build a REST API'}
]
# GET: সকল টাস্ক দেখানো
@app.route('/todos', methods=['GET'])
def get_todos():
return jsonify(todos)
# GET: একটি টাস্ক দেখানো
@app.route('/todos/<int:id>', methods=['GET'])
def get_todo_by_id(id):
todo = next((todo for todo in todos if todo['id'] == id), None)
if todo is None:
return jsonify({'error': 'Task not found'}), 404
return jsonify(todo)
# POST: একটি নতুন টাস্ক যোগ করা
@app.route('/todos', methods=['POST'])
def create_todo():
new_task = request.get_json()
new_task['id'] = todos[-1]['id'] + 1 if todos else 1
todos.append(new_task)
return jsonify(new_task), 201
# PUT: একটি টাস্ক আপডেট করা
@app.route('/todos/<int:id>', methods=['PUT'])
def update_todo(id):
todo = next((todo for todo in todos if todo['id'] == id), None)
if todo is None:
return jsonify({'error': 'Task not found'}), 404
updated_task = request.get_json()
todo['task'] = updated_task.get('task', todo['task'])
return jsonify(todo)
# DELETE: একটি টাস্ক মুছে ফেলা
@app.route('/todos/<int:id>', methods=['DELETE'])
def delete_todo(id):
global todos
todos = [todo for todo in todos if todo['id'] != id]
return jsonify({'message': 'Task deleted'}), 200
if __name__ == '__main__':
app.run(debug=True)
কোডের ব্যাখ্যা:
- GET:
/todosএ ক্লিক করলে সকল টাস্কের তালিকা পাওয়া যাবে।/todos/<id>এ ক্লিক করলে নির্দিষ্ট একটি টাস্কের বিস্তারিত দেখাবে। - POST:
/todosএ একটি নতুন টাস্ক পাঠানোর মাধ্যমে নতুন টাস্ক তৈরি করা যাবে। - PUT:
/todos/<id>এ টাস্ক আপডেট করতে পারবে। - DELETE:
/todos/<id>এ টাস্ক মুছে ফেলা যাবে।
ধাপ ৩: API চালু করা
উপরোক্ত কোড রান করার জন্য নিচের কমান্ডটি ব্যবহার করুন:
python app.py
এটি localhost:5000 পোর্টে আপনার API সার্ভার চালু করবে। আপনি এখন GET, POST, PUT, এবং DELETE রিকোয়েস্ট পাঠিয়ে API টেস্ট করতে পারেন।
REST API ব্যবহার (Client-Side)
এখন আমরা দেখি কীভাবে এই API-টি ব্যবহার করতে হবে। Python থেকে requests লাইব্রেরি ব্যবহার করে API কল করা যাবে।
ধাপ ১: requests লাইব্রেরি ইনস্টল করা
pip install requests
ধাপ ২: API ব্যবহার করা
import requests
# GET Request
response = requests.get('http://127.0.0.1:5000/todos')
print(response.json()) # সমস্ত টাস্ক দেখাবে
# POST Request
new_task = {'task': 'Finish homework'}
response = requests.post('http://127.0.0.1:5000/todos', json=new_task)
print(response.json()) # নতুন টাস্ক যোগ হবে
# PUT Request
updated_task = {'task': 'Learn Flask'}
response = requests.put('http://127.0.0.1:5000/todos/1', json=updated_task)
print(response.json()) # টাস্ক আপডেট হবে
# DELETE Request
response = requests.delete('http://127.0.0.1:5000/todos/2')
print(response.json()) # টাস্ক মুছে যাবে
কোডের ব্যাখ্যা:
- GET Request:
requests.get()ব্যবহার করে API থেকে ডেটা নেওয়া হয়েছে। - POST Request: নতুন টাস্ক যোগ করতে
requests.post()ব্যবহার করা হয়েছে। - PUT Request: টাস্ক আপডেট করতে
requests.put()ব্যবহার করা হয়েছে। - DELETE Request: একটি টাস্ক মুছে ফেলতে
requests.delete()ব্যবহার করা হয়েছে।
সারাংশ
REST API হলো একটি জনপ্রিয় ওয়েব সার্ভিস আর্কিটেকচার যা HTTP প্রটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ করতে সাহায্য করে। আমরা Flask ব্যবহার করে খুব সহজে REST API তৈরি করতে পারি এবং তা ব্যবহার করতে requests লাইব্রেরি ব্যবহার করা হয়। GET, POST, PUT, DELETE HTTP মেথডগুলো দিয়ে বিভিন্ন অপারেশন সম্পাদন করা যায়।